package com.cg.mapper;

import com.cg.dto.ChatSessionDTO;
import com.cg.dto.ChatMessageDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

@Mapper
public interface ChatSessionMapper {
    
    /**
     * 创建新的聊天会话
     */
    int createSession(ChatSessionDTO session);
    
    /**
     * 根据会话ID获取会话信息
     */
    ChatSessionDTO getSessionById(@Param("sessionId") Long sessionId);
    
    /**
     * 获取用户的所有会话列表
     */
    List<ChatSessionDTO> getSessionsByUserId(@Param("userId") Long userId);
    
    /**
     * 根据用户ID和会话类型获取会话列表
     */
    List<ChatSessionDTO> getSessionsByUserIdAndType(@Param("userId") Long userId, @Param("sessionType") String sessionType);
    
    /**
     * 更新会话信息
     */
    int updateSession(ChatSessionDTO session);
    
    /**
     * 删除会话（从数据库中完全删除）
     * @param sessionId 会话ID
     * @param userId 用户ID
     * @return 删除的行数
     */
    int deleteSession(@Param("sessionId") Long sessionId, @Param("userId") Long userId);
    
    /**
     * 删除会话相关的所有消息
     * @param sessionId 会话ID
     * @return 删除的行数
     */
    int deleteSessionMessages(@Param("sessionId") Long sessionId);
    
    /**
     * 添加消息到会话
     */
    int addMessage(ChatMessageDTO message);
    
    /**
     * 获取会话的所有消息
     */
    List<ChatMessageDTO> getMessagesBySessionId(@Param("sessionId") Long sessionId);
    
    /**
     * 获取会话的消息数量
     */
    int getMessageCountBySessionId(@Param("sessionId") Long sessionId);
    
    /**
     * 更新会话的最后活跃时间
     */
    int updateLastActiveTime(@Param("sessionId") Long sessionId);

    /**
     * 启动时批量刷新会话标题为首条用户消息的前10字（超出加...）
     */
    int updateAllSessionTitlesFromFirstUserMsg();
}
